from django.shortcuts import render

# Create your views here.



# 查询省份信息
# select * from tb_areas where parent_id is null;
# GET       areas/infos/


#查询市信息
# select * from tb_areas where parent_id=130000;
#查询区县
# select * from tb_areas where parent_id=130600;

# GET       areas/infos/pk/


#以上可以定义2 个 视图去实现

#我们采用 视图集来实现

from rest_framework.viewsets import ReadOnlyModelViewSet

from areas.models import Area

from .serializers import AreaSerializer,AreaSerializer1
from rest_framework.generics import GenericAPIView

# from rest_framework_extensions.cache.mixins import ListCacheResponseMixin,RetrieveCacheResponseMixin,CacheResponseMixin
from rest_framework_extensions.cache.mixins import CacheResponseMixin

class AreasReadOnlyModelViewSet(CacheResponseMixin,ReadOnlyModelViewSet):


    pagination_class = None

    # GenericAPIView
    """
    queryset - 应该用于从此视图返回对象的查询集。
    通常，您必须设置此属性，或覆盖该get_queryset()方法。
    如果要覆盖视图方法，则必须调用get_queryset()而不是直接访问此属性，
    因为queryset将进行一次评估，并且将为所有后续请求缓存这些结果。

    serializer_class - 应该用于验证和反序列化输入以及序列化输出的序列化程序类。
    通常，您必须设置此属性，或覆盖该get_serializer_class()方法

    list        GET         areas/infos/        省

    retrieve    GET         areas/infos/pk/     市，区县

    """

    # queryset = Area.objects.all()
    # queryset = Area.objects.filter(parent__isnull=True)     # 省份信息

    # 重写这个方法我们可以根据具体的业务逻辑 返回不同的查询结果集
    def get_queryset(self):

        # self 是视图集
        # 视图集有 list,retieve,create,destory等方法
        if self.action == 'list':
            #省份信息
            return Area.objects.filter(parent__isnull=True)
        else:
            return Area.objects.all()



    # serializer_class = AreaSerializer       #省
    # serializer_class = AreaSerializer1      #市 区县
    # 重写这个方法我们可以根据具体的业务逻辑 返回不同的序列化器
    def get_serializer_class(self):

        if self.action == 'list':
            #省的
            return AreaSerializer
        else:
            return AreaSerializer1



